In [1]:
# IMPORTANDO BIBLIOTECAS
# IMPORT LIBRARY

import pandas as pd 
import plotly.express as px
In [2]:
# IMPORTANDO BASE DE DADOS
# IMPORT DATABASE
df = pd.read_csv("telecom_users.csv")
display(df)
Unnamed: 0 IDCliente Genero Aposentado Casado Dependentes MesesComoCliente ServicoTelefone MultiplasLinhas ServicoInternet ... ServicoSuporteTecnico ServicoStreamingTV ServicoFilmes TipoContrato FaturaDigital FormaPagamento ValorMensal TotalGasto Churn Codigo
0 1869 7010-BRBUU Masculino 0 Sim Sim 72 Sim Sim Nao ... SemInternet SemInternet SemInternet 2 anos Nao CartaoCredito 24.10 1734.65 Nao NaN
1 4528 9688-YGXVR Feminino 0 Nao Nao 44 Sim Nao Fibra ... Nao Sim Nao Mensal Sim CartaoCredito 88.15 3973.2 Nao NaN
2 6344 9286-DOJGF Feminino 1 Sim Nao 38 Sim Sim Fibra ... Nao Nao Nao Mensal Sim DebitoAutomatico 74.95 2869.85 Sim NaN
3 6739 6994-KERXL Masculino 0 Nao Nao 4 Sim Nao DSL ... Nao Nao Sim Mensal Sim BoletoEletronico 55.90 238.5 Nao NaN
4 432 2181-UAESM Masculino 0 Nao Nao 2 Sim Nao DSL ... Nao Nao Nao Mensal Nao BoletoEletronico 53.45 119.5 Nao NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5981 3772 0684-AOSIH Masculino 0 Sim Nao 1 Sim Nao Fibra ... Nao Sim Sim Mensal Sim BoletoEletronico 95.00 95 Sim NaN
5982 5191 5982-PSMKW Feminino 0 Sim Sim 23 Sim Sim DSL ... Sim Sim Sim 2 anos Sim CartaoCredito 91.10 2198.3 Nao NaN
5983 5226 8044-BGWPI Masculino 0 Sim Sim 12 Sim Nao Nao ... SemInternet SemInternet SemInternet Mensal Sim BoletoEletronico 21.15 306.05 Nao NaN
5984 5390 7450-NWRTR Masculino 1 Nao Nao 12 Sim Sim Fibra ... Nao Sim Sim Mensal Sim BoletoEletronico 99.45 1200.15 Sim NaN
5985 860 4795-UXVCJ Masculino 0 Nao Nao 26 Sim Nao Nao ... SemInternet SemInternet SemInternet Anual Nao CartaoCredito 19.80 457.3 Nao NaN

5986 rows × 23 columns

In [3]:
# tratamento da base de dados
# database treatment
# axis = 0 _> linha ou axis = 1 _> coluna
# 1º limpeza
# 1º cleaning

df = df.drop(["Unnamed: 0", "Codigo"], axis=1)

# removendo colunas vazias:
# removing empty columns:

df = df.dropna(how="all", axis=1)    # all remove se estiver todas linha ou coluna vazia

# removendo linhas vazias 
# removing empty lines

df = df.dropna(how="any", axis=0)     # any remove se tiver 1 ou mais vazios
# tratamento da base de dados
In [4]:
# 2º informações disponiveis
# 2 information availableprint(df.info())
print(df.info())
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5984 entries, 0 to 5985
Data columns (total 21 columns):
 #   Column                  Non-Null Count  Dtype  
---  ------                  --------------  -----  
 0   IDCliente               5984 non-null   object 
 1   Genero                  5984 non-null   object 
 2   Aposentado              5984 non-null   int64  
 3   Casado                  5984 non-null   object 
 4   Dependentes             5984 non-null   object 
 5   MesesComoCliente        5984 non-null   int64  
 6   ServicoTelefone         5984 non-null   object 
 7   MultiplasLinhas         5984 non-null   object 
 8   ServicoInternet         5984 non-null   object 
 9   ServicoSegurancaOnline  5984 non-null   object 
 10  ServicoBackupOnline     5984 non-null   object 
 11  ProtecaoEquipamento     5984 non-null   object 
 12  ServicoSuporteTecnico   5984 non-null   object 
 13  ServicoStreamingTV      5984 non-null   object 
 14  ServicoFilmes           5984 non-null   object 
 15  TipoContrato            5984 non-null   object 
 16  FaturaDigital           5984 non-null   object 
 17  FormaPagamento          5984 non-null   object 
 18  ValorMensal             5984 non-null   float64
 19  TotalGasto              5984 non-null   object 
 20  Churn                   5984 non-null   object 
dtypes: float64(1), int64(2), object(18)
memory usage: 1.0+ MB
None
In [5]:
# Analise exploratoria de Churn
# Churn's exploratory analysis

print(df["Churn"].value_counts())
print(df["Churn"].value_counts(normalize=True).map("{:.1%}".format))
Nao    4397
Sim    1587
Name: Churn, dtype: int64
Nao    73.5%
Sim    26.5%
Name: Churn, dtype: object
In [6]:
# Alanise com graficos comparativos com Churn
# Alanise with comparative charts with Churn

for coluna in df.columns:
    grafico = px.histogram(df, x=coluna, color="Churn", text_auto=True, color_discrete_sequence=["black", "red"])
    grafico.show()

Conclusões:¶

questão problema: Clientes com contrato mensal tem mais chance de cancelar, como mostra o histrograma de Tipo de cliente: ideia: Estudar e execultar propsota para captar cliente com plano anual, como ofertar de desconto do plano anual.

ideia: falimia maiores tendem a cancelar menos do que familia menores, propor uma promoção para numeros adionais.

questão problema: histrograma Meses como clientes mostra que uma grande parte de clientes com poucos meses de experiencia tendem a cancelar, o poblema pode ser no suporte da empresa ou na captação de clientes desqualificados. ideia: estudar os principais motivos de cancelamento para ir a fundo pois esses numeros estão representando uma grande parte do cancelamento.

ideia:QUanto mais serviços o cliente tem, menos chance dele cancelar, incetivar ofertas para clientes que ja tem algum tipo de plano, onde assim ira estender os serviços e faturamento.

ideia: Clientes no boleto tem MUITO mais chance de cancelar, então temos que fazer alguma ação para eles irem para as outras formas de pagamento

questão poblema: Tem alguma coisa no nosso serviço de Fibra que tá fazendo os clientes cancelarem.